﻿package encrypt
{
	import com.hurlant.math.BigInteger;
	import flash.utils.ByteArray;
	import flash.utils.Endian;

	public class BigIntFactory
	{

		public function BigIntFactory()
		{
			// constructor code
		}

		public static function Create(hexInt:String):BigInteger
		{
			if (hexInt.substr(0,2) == "0x")
			{
				hexInt = hexInt.substr(2,hexInt.length-2);
			}
			if(hexInt.substr(hexInt.length-1,1) == "L")
			{
				hexInt = hexInt.substr(0,hexInt.length -1);
			}
			return new BigInteger(hexInt,16);
		}

		public static function ToByteArray(number:BigInteger):ByteArray
		{
			
			var hexInt:String = number.toString(16);
			if (hexInt.substr(0,2) == "0x")
			{
				hexInt = hexInt.substr(2,hexInt.length);
			}
			if(hexInt.substr(hexInt.length -1,1) == "L")
			{
				hexInt = hexInt.substr(0,hexInt.length -1);
			}
			if ((hexInt.length & 0x1) == 1)
			{
				hexInt = "0" + hexInt;
			}
			var len:uint = hexInt.length;
			var stream:ByteArray = new ByteArray();
			for (var i:int = hexInt.length; i >= 2; i -=2)
			{
				var hex:String = hexInt.substr( i - 2 , 2 );
				stream.writeByte(parseInt(hex,16));
			}
			return stream;
		}
		public static function Attach(stream:ByteArray):BigInteger
		{
			var hexInt:String = "";
			for(var i:int = 0 ; i < stream.length ; i ++)
			{
				hexInt =(stream[i] & 0xff).toString(16) + hexInt;
			}
			return new BigInteger(hexInt,16);

		}
	}

}